import { glyphsUrl, spriteUrl } from "../../mapbox_config/mapConfigManager/index";

// 导出一个函数，用于获取地图样式
export const getMapStyleMgr = (TileUrl: string) => {
    console.log(spriteUrl);

    // 定义地图样式
    const mapStyle = {
        version: 8, // 版本号
        sources: {
            'osm-tiles': {
                type: 'raster', // 类型为栅格
                tiles: [TileUrl], // 地图瓦片地址
            }
        },
        glyphs: glyphsUrl, //字体
        sprite: spriteUrl,  //雪碧图 
        layers: [{
            id: 'osm-tiles', // 图层id
            type: 'raster', // 类型为栅格
            source: 'osm-tiles' // 数据源
        }]
    }
    // 返回地图样式
    return mapStyle;
}

// 导出一个函数，用于改变地图样式
export const changeMapStyleMgr = (map: any, TileUrl: string) => {
    // 记录原样式中的 sources 和 layers
    const { originalSources, originalLayers } = originalStyleMgr(map)

    // 获取地图样式
    const mapStyle = getMapStyleMgr(TileUrl);
    // 设置地图样式
    map.setStyle(mapStyle);

    // 恢复地图样式
    restoreMapStyleMgr(map, originalSources, originalLayers)
}

// 记录原样式中的 sources 和 layers ， 用于恢复地图样式
export const originalStyleMgr = (map: any) => {
    // 记录原样式中的 sources 和 layers
    const originalStyle = map.getStyle();
    const originalSources = originalStyle.sources;
    const originalLayers = originalStyle.layers;
    return { originalSources, originalLayers };
}

// 恢复地图样式
export const restoreMapStyleMgr = (map: any, originalSources: any, originalLayers: any) => {
    // 监听 styledata 事件
    map.on('styledata', () => {
        if (map.isStyleLoaded()) {
            // 添加原有的 sources
            for (const sourceId in originalSources) {
                if (!map.getSource(sourceId)) {
                    map.addSource(sourceId, originalSources[sourceId]);
                }
            }
            // 添加原有的 layers
            originalLayers.forEach((layer: any) => {
                if (!map.getLayer(layer.id)) {
                    try {
                        map.addLayer(layer);
                    } catch (error) {
                        console.error(`添加图层 ${layer.id} 时出错:`, error);
                    }
                }
            });

            // 移除事件监听器
            map.off('styledata');
        }
    });
}


// 导出一个函数removeMap，用于移除传入的map
export const removeMapMgr = (map: any) => {
    // 调用map的remove方法，移除map
    map.remove();
}
